fn main() {
    println!("match 匹配模式, 要求所有可能均被覆盖!");

    let number = 7;
    println!("当前值: {}", number);
    match number {
        1 => println!("one"),
        2 | 3 | 5 | 7 | 11 => println!("质数"),
        _ => println!("其他"),
    }

    let actived = false;
    println!("actived: {}", actived);
    match actived {
        false => println!("没有激活"),
        true => println!("激活了"),
    }

    let bit = match actived {
        false => 0,
        true => 1,
    };
    println!("active 转为 bit: {}", bit);

    println!("对指针来说，解构（destructure）和解引用（dereference）要区分开，因为这两者的概念是不同的，和 C 那样的语言用法不一样。
    解引用使用 * 
    解构使用 &、ref、和 ref mut 
    // Rust中使用&符号表示引用，也叫引用操作符。其使用场景是只使用类型的值但不获取其所有权，同时Rust的引用规则为：
    // 在作用域中的数据有且只能有一个可变引用
    // 可以有多个不可变引用
    // 不能同时拥有不可变引用和可变引用
    // & 和 ref
    // ref在等于号左边等价于&符号在等号右边
    // &在等于号左边等价于*号在等于号右边");

    let refrence = &4;
    match refrence {
        &val => println!("引用类型的值(val &val相同): {}", val),
    }
    match *refrence {
        val => println!("解引用后使用val: {}", val),
    }

    let value = 5;
    match value {
        ref r => println!("ref 引用后的值: {}", r),
    }

    let mut mut_value = 6;
    match mut_value {
        ref mut m => {
            println!("可变值:{},", m);
            *m += 1;
            println!("mut变量,match到 ref mut后,*解引用, 然后后加1, 的值: {}", m);
        }
    }

    let value = 6;
    match value {
        mut m => {
            m += 1;
            println!("不可变量,match到 mut后, 加1, 的值: {}", m);
        }
    }
}
